home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / S-Sound and Music / (c)s3.d64 / sound tut-1.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  17KB  |  461 lines

  1. 0 REM" P.J.PONZO*83*WATERLOO/ONTARIO
  2. 1000 [141]60000:[153][199](142):[153]"LOAD               SOUND-1"
  3. 1001 [153]"ORTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTAN^"
  4. 1002 [153]"(null)             C64 SOUND              WAIT (null)":MS$[178]"PONZOTUTOR"
  5. 1003 [153]"/TANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANTANEXPSTOP":[141]63100:MS$[178]" WELCOME!"
  6. 1004 [141]63100:[141]50000:[141]63000:[153]"LOADSTOP";
  7. 1010 [153]"LOADSOUND IS MADE UP OF AIR MOVEMENT,"
  8. 1020 [153]"INCREASING AND DECREASING IN PRESSURE"
  9. 1030 [153]"AND STRIKING OUR EAR PRODUCING THE"
  10. 1040 [153]"SENSATION WE DESCRIBE AS 'MUSIC'"
  11. 1050 [153]"...OR 'NOISE', DEPENDING UPON THE"
  12. 1060 [153]"WAY THE CHANGES IN PRESSURE OCCUR.":MS$[178]"  NOISE?":[141]63100
  13. 1070 [141]63000:[153]"LOADEVEN 'MUSICAL' SOUNDS DIFFER FROM ONE"
  14. 1080 [153]"INSTRUMENT TO ANOTHER."
  15. 1110 [153]"A SIMPLE 'SCHEME' WHICH DESCRIBES"
  16. 1120 [153]"THE DIFFERENCES BETWEEN VARIOUS"
  17. 1130 [153]"MUSICAL UNSTRUMENTS IS AS FOLLOWS:"
  18. 1140 [153]"WE'LL LOOK AT A 'NOTE' FROM SOME"
  19. 1150 [153]"FICTITIOUS MUSICAL INSTRUMENT..":MS$[178]"LET'S LOOK":[141]63100
  20. 1155 [141]63000
  21. 1160 [153]"LOAD<LENLENLENLENLENATTACKLENLENLENLENLENLENLEN><LENDECAYLEN><LENSUSTAINLEN>":[141]62000:[141]63200
  22. 1170 [153]""BL$"THE 'SUSTAIN' PART LASTS AND LASTS.... ":[141]63000
  23. 1180 [153]"LOAD":[141]63300:[153]"...UNTIL THE NOTE IS 'RELEASED'."
  24. 1190 [153]"LENLENLENLENLENLENLENSUSTAINLENLENLENLENLENLENLEN><LENRELEASELEN>":MS$[178]"   ADSRWAIT":[141]63100
  25. 1200 [141]63000:[153]"LOADHERE'S ONE COMPLETE NOTE:":[141]63100:[141]63400
  26. 1210 [141]63000:[153]"LOADWE CAN TELL THE SWAITOUND"
  27. 1220 [153]"IWAITWAITNTERFACE DWAITEVICE (SID CHIP)"
  28. 1230 [153]"WHAT WE WANT FOR THE AWAITTTACK, DWAITECAY"
  29. 1240 [153]"SWAITUSTAIN AND RWAITELEASE."
  30. 1250 [153]"WE HAVE 16 POSSIBLE VALUES FOR EACH,"
  31. 1260 [153]"THAT'S 4 BITS WORTH, SO WE CAN SQUEEZE"
  32. 1270 [153]"ATTACK/DECAYWAIT INTO ONE REGISTER AND"
  33. 1280 [153]"SUSTAIN/RELEASEWAIT INTO ANOTHER REGISTER."
  34. 1285 MS$[178]"  ADWAIT SRWAIT":[141]63100:[141]63000
  35. 1290 [153]"LOADTHE SID CHIP STARTS AT $D400"
  36. 1300 [153]"OR SID=54272WAIT."
  37. 1310 [153]"IF 0<=AT<=15 AND 0<=DE<=15
  38. 1320 PRINT" & 0<=SU<=15 AND 0<=RE<=15
  39. 1330 [153]"THEN:
  40. 1340 PRINT"POKE SID+5,16*AT+DE"
  41. 1350 PRINT"POKE SID+6,16*SU+RE"
  42. 1360 MS$=" SID+5 & 6":GOSUB63100:GOSUB63000
  43. 1370 PRINT"[147]THE TIME TAKEN TO COMPLETE THE ATTACK[146]"
  44. 1380 PRINT"DEPENDS UPON THE VALUE OF AT[146]:0-15."
  45. 1390 PRINT"FOR AT=0[146] IT TAKES 2 MILLISECONDS."
  46. 1400 PRINT"FOR AT=15[146] IT TAKES 8 SECONDS!"
  47. 1410 PRINT"THE 'DECAY' AND 'RELEASE' TIMES ARE"
  48. 1420 PRINT"THREE TIMES AS LONG:"
  49. 1430 PRINT"DE=0[146] TAKES 6 MILLISECONDS."
  50. 1440 PRINT"DE=15[146] TAKES 24 SECONDS!!"
  51. 1450 PRINT"(SAME FOR 'RELEASE')."
  52. 1460 MS$="24 SECONDS":GOSUB63100:GOSUB63000
  53. 1470 PRINT"[147]THE ADSR[146] SETTINGS GIVE THE OUTLINE"
  54. 1480 PRINT"OF THE WAVEFORM (THE 'ENVELOPE')."
  55. 1490 PRINT"IN ADDITION WE CAN CHOOSE THE FREQUENCY[146]"
  56. 1500 PRINT"OF THE OSCILLATIONS:[186][208][186][208][186][208][186][208][186][208][186][208]."
  57. 1510 PRINT"BECAUSE OF THE WIDE RANGE IN FREQUENCY"
  58. 1520 PRINT"WE NEED 16 BITS OR 2 BYTES TO HOLD THE"
  59. 1530 PRINT"FREQUENCY. THIS GIVES 65536 POSSIBLE"
  60. 1540 PRINT"FREQUENCIES..UP TO ABOUT 4000 HERTZ.":MS$="  2 BYTES"
  61. 1550 PRINT"POKE SID,LO:POKE SID+1,HI":GOSUB63100:GOSUB63000
  62. 1560 PRINT"[147]IF FQ[146] IS THE 'FREQUENCY NUMBER',"
  63. 1570 PRINT"WITH 0<=FQ<=65535, THEN:"
  64. 1580 PRINT"HI=INT(FQ/256):LO=FQ-256*HI"
  65. 1590 PRINT"GIVING THE 2 BYTES FOR SID, SID+1.":MS$="SID,SID+1":GOSUB63100
  66. 1600 GOSUB63000:PRINT"[147]EACH 'NUMBER', FQ, CORRESPONDS TO"
  67. 1610 PRINT"A 'FREQUENCY', IN CYCLES PER SECOND,"
  68. 1620 PRINT"ACCORDING TO THE MAGIC FORMULA:"
  69. 1630 PRINT"FQ=ACTUAL FREQUENCY/.059604645[146]."
  70. 1640 PRINT"IF YOU WANT TO HEAR 'A' IN THE 4'TH"
  71. 1650 PRINT"OCTAVE OF THE PIANO KEYBOARD, THAT'S"
  72. 1660 PRINT"440 HERTZ, SO FQ=440/.059604645=7381.97"
  73. 1670 PRINT"..LET'S SAY: FQ=7382."
  74. 1680 PRINT"THEN: HI=INT(7382/256)=28       "
  75. 1690 PRINT"      LO=7382-256*HI=214        "
  76. 1700 PRINT"      POKE SID,214:POKE SID+1,28":GOSUB63000
  77. 1710 PRINT"[147]OK..WE'VE GIVEN THE SID CHIP THE ADSR[146]"
  78. 1720 PRINT"ENVELOPE, AND THE FREQUENCY NUMBER[146],"
  79. 1730 PRINT"NOW WE CHOOSE THE WAVEFORM[146]:"
  80. 1740 PRINTTR$TR$TR$"    = TRIANGLE"
  81. 1750 PRINT""SA$SA$SA$SA$SA$" = SAWTOOTH"
  82. 1760 PRINT""PU$PU$PU$" = PULSE":NN=9:GOSUB63500
  83. 1770 PRINT""NO$" =":MS$=" NOISE[146]!!!":GOSUB63100:GOSUB63000
  84. 1780 PRINT"[147]'NOISE' CONSISTS OF A SEQUENCE"
  85. 1790 PRINT"OF PULSES OF RANDOM AMPLITUDE..."
  86. 1800 FORL=1TO4:GOSUB63500:PRINT"":FORP=1TO4*L:PRINT"";:NEXT
  87. 1810 PRINTNO$;:NEXT:GOSUB63100:GOSUB63000
  88. 1820 PRINT"[147]POKE SID+4[146] WITH A 'WAVEFORM NUMBER':WN"
  89. 1830 PRINT"TO GET THE DESIRED WAVEFORM."
  90. 1840 PRINT""TR$TR$"  : POKE SID+4,17"
  91. 1850 PRINT""SA$SA$"    : POKE SID+4,33"
  92. 1860 PRINT""PU$PU$" : POKE SID+4,65"
  93. 1870 PRINT""NO$" : POKE SID+4,129"
  94. 1880 MS$=" SID+4,WN":GOSUB63100:GOSUB63000:PRINT"";:FORI=1TO4:PRINTBL$:NEXT
  95. 1890 PRINT"NOTE THE VALUES OF WN[146]:":PRINT"WN=16+1,32+1,64+1,128+1"
  96. 1900 GOSUB63000:PRINT"[147]";:PRINTNN$(1):PRINTNN$(2)" SID+4":PRINTNN$(3)
  97. 1910 PRINT"HERE'S THE SID+4[146] REGISTER."
  98. 1920 PRINT"FOR "TR$" WE POKE SID+4,17":PRINT"00010001"
  99. 1930 GOSUB63000:PRINT"[147]";:PRINTNN$(1):PRINTNN$(2)" SID+4":PRINTNN$(3)
  100. 1940 PRINT"HERE'S THE SID+4[146] REGISTER."
  101. 1950 PRINT"FOR "SA$" WE POKE SID+4,33":PRINT"00100001"
  102. 1960 GOSUB63000:PRINT"[147]";:PRINTNN$(1):PRINTNN$(2)" SID+4":PRINTNN$(3)
  103. 1970 PRINT"HERE'S THE SID+4[146] REGISTER."
  104. 1980 PRINT"FOR "PU$" WE POKE SID+4,65":PRINT"01000001"
  105. 1990 GOSUB63000:PRINT"[147]";:FORI=1TO3:PRINTNN$(I):NEXT
  106. 2000 PRINT"HERE'S THE SID+4[146] REGISTER."
  107. 2010 PRINT"FOR "NO$" WE POKE SID+4,129":PRINT"10000001"
  108. 2020 GOSUB63000:PRINT"[147]";:PRINTNN$(1):PRINTNN$(2)" SID+4":PRINTNN$(3)
  109. 2030 GB$="":FORI=1TO5:PRINTGB$"[214]":FORT=1TO100:NEXT
  110. 2040 PRINTGB$"[146][214]":FORT=1TO100:NEXT:NEXT
  111. 2050 PRINT"THIS BIT, THE GATE BIT[146], WHEN"
  112. 2060 PRINT"SET TO '1', STARTS THE NOTE!!"
  113. 2070 PRINT"SO BE SURE THE ADSR[146], FREQUENCY #,"
  114. 2080 PRINT"AND ANY OTHER PARAMETERS ARE GIVEN"
  115. 2090 PRINT"TO SID[146] BEFORE[157][157][157][157][157][157][184][184][184][184][184][184][145] YOU:"
  116. 2100 PRINT"POKE SID+4,WN[146]!":GOSUB63000:MS$=" OTHERS?":GOSUB63100
  117. 2110 PRINT"[147]IF YOU CHOOSE PULSE[146],"
  118. 2120 PRINT"THEN EACH CYCLE[146] CAN BE:"
  119. 2130 PRINT"[207][204][175][175][175][175][175][175][175][186]":PRINT"[207][183][204][175][175][175][175][175][175][186]"
  120. 2140 PRINT"[207][183][183][204][175][175][175][175][175][186]":PRINT"[207][183][183][208][175][175][175][175][175][186]"
  121. 2150 PRINT"[207][183][183][183][208][175][175][175][175][186]":PRINT"[207][183][183][183][183][183][204][175][175][186]"
  122. 2160 PRINT"ETC. ETC.":GOSUB63000:MS$="PULSEWIDTH":GOSUB63100:GOSUB63000
  123. 2170 PRINT"[147]THE PULSE WIDTH[146] IS GIVEN TO SID[146]"
  124. 2180 PRINT"AS A 12 BIT NUMBER:"
  125. 2190 PRINT"12 BITS MEANS THERE ARE 2^12=4096"
  126. 2200 PRINT"POSSIBLE 'PULSE WIDTHS'."
  127. 2210 PRINT"IF 0<=PW<=4095 THEN:"
  128. 2220 PRINT"POKE SID+4,PW AND 255:POKE SID+5,PW/256"
  129. 2230 PRINT"WHICH FILLS THESE SID REGISTERS WITH"
  130. 2240 PRINT"A LOW BYTE AND A HIGH NYBBLE (!)"
  131. 2250 MS$=" NYBBLE!":GOSUB63100:GOSUB63000
  132. 2260 PRINT"[147]";:PRINTNN$(1)"      "N$(1):PRINTNN$(2)"_SID+2"N$(2)"_SID+3"
  133. 2270 PRINTNN$(3)"      "N$(3)
  134. 2280 PRINT"    LOW BYTE"SPC(11)"HI NYBBLE"
  135. 2290 PRINT"INCREASING PW[146] CHANGES THE PULSES:"
  136. 2310 PRINT"[207][204][175][175][175][175][175][175][175][186]":PRINT"[207][183][204][175][175][175][175][175][175][186]"
  137. 2320 PRINT"[207][183][183][204][175][175][175][175][175][186]":PRINT"[207][183][183][208][175][175][175][175][175][186]"
  138. 2330 PRINT"[207][183][183][183][208][175][175][175][175][186]":PRINT"[207][183][183][183][183][183][204][175][175][186]"
  139. 2340 PRINT"ETC. ETC.":GOSUB63000:MS$="DUTY CYCLE":GOSUB63100:GOSUB63000
  140. 2350 PRINT"[147]FOR A FRACTION OF EACH CYCLE THE"
  141. 2360 PRINT"PULSE IS 'HIGH'...THEN IT'S 'LOW'."
  142. 2370 PRINT"THE HIGH FRACTION IS GIVEN BY PW[146]:"
  143. 2380 PRINT"HIGH FRACTION = PW/4095":MS$=" 2048=50[146]%":GOSUB63100:GOSUB63000
  144. 2390 PRINT"[147]SO FAR WE HAVE:"
  145. 2400 PRINT"SID=54272"
  146. 2410 PRINT"POKE SID  ,LO FREQ NUMBER"
  147. 2420 PRINT"POKE SID+1,HI FREQ NUMBER"
  148. 2430 PRINT"POKE SID+2,LO PULSE WIDTH"
  149. 2440 PRINT"POKE SID+3,HI PULSE WIDTH"
  150. 2450 PRINT"POKE SID+5,16*ATTACK+DECAY"
  151. 2460 PRINT"POKE SID+6,16*SUSTAIN+RELEASE"
  152. 2465 PRINT"POKE SID+24,VOLUME!!!!":GOSUB63000:MS$="VOLUME<16":GOSUB63100
  153. 2470 GOSUB63000:MS$="...THEN??":GOSUB63100:GOSUB63000
  154. 2480 PRINT"POKE SID+4,WAVEFORM NUMBER"
  155. 2490 PRINT"TO TURN ON THE SOUND!!":GOSUB63000:MS$="LET'S TRY!":GOSUB63100
  156. 2500 GOSUB63000:PRINT"[147]WE'LL SOUND AN 'A'."
  157. 2510 PRINT"THAT HAS A FREQUENCY OF 440 HERTZ."
  158. 2520 PRINT"440/.059604645=7382"
  159. 2530 PRINT"SO WE SET FQ=7382[146]...."
  160. 2540 PRINT"THAT'S THE 'FREQUENCY NUMBER'."
  161. 2550 PRINT"WE'LL CHOOSE PULSE[146] WAVEFORM AND"
  162. 2560 PRINT"SOME NICE ADSR[146] NUMBERS, ETC.":GOSUB63000:FR=440
  163. 2570 FQ=7382:AT=10:DE=2:SU=10:RE=11:PU=3000:WN=65:VOL=15:GOSUB63600
  164. 2580 MS$="YOUR TURN!":GOSUB63100:GOSUB63000
  165. 2600 PRINT"[147]OK...YOU[157][157][157][184][184][184][145] PICK SOME PARAMETERS:":GOSUB63000
  166. 2610 GOSUB63800:GOSUB63600
  167. 2620 INPUT"[147]AGAIN  Y[157][157][157]";A$:IFA$="Y"THEN2610
  168. 2630 PRINT"[147]OK...WAIT...":MS$="  LISTEN":GOSUB63100
  169. 2700 GOSUB60000
  170. 2705 PRINT"[147]S=54272         [146] SID CHIP BASE"
  171. 2710 PRINT"POKE S+5,16*00+0[146] AT=0,DE=0"
  172. 2720 PRINT"POKE S+6,16*15+9[146] SU=15,RE=9"
  173. 2730 PRINT"POKE S+24,15    [146] VOLUME=15"
  174. 2740 PRINT"FORI=1 TO N     [146] PLAY N NOTES"
  175. 2750 PRINT"READ FQ,D       [146] READ FREQ & DURATION"
  176. 2760 PRINT"HI=INT(FQ/256)  [146] HI FREQ"
  177. 2770 PRINT"LO=FQ-256*HI    [146] LO FREQ"
  178. 2780 PRINT"POKE S,LO       [146] POKE LO"
  179. 2790 PRINT"POKE S+1,HI     [146] POKE HI"
  180. 2795 PRINT"WN=17           [146] WAVENUMBER"
  181. 2800 PRINT"POKE S+4,WN     [146] GATE NOTE ON"
  182. 2810 PRINT"FORJ=1TOD:NEXT  [146] DURATION       "
  183. 2820 PRINT"POKE S+4,WN-1   [146] RELEASE NOTE   "
  184. 2830 PRINT"NEXT                            [146]"
  185. 2835 AT=0:DE=0:SU=15:RE=9:M0=1:PU=2000
  186. 2840 M1=10:WN$="":WN=17:PRINTWN$WN:GOSUB10000
  187. 2850 M0=M1:M1=20:WN=33:PRINTWN$WN:GOSUB10000
  188. 2860 M0=M1:M1=30:WN=65:PRINTWN$WN:GOSUB10000
  189. 2865 M0=M1:M1=40:RE=0:RE$=""
  190. 2870 WN=17:PRINTWN$WN:FORA=1TO10:PRINTRE$"[214]0"
  191. 2871 FORT=1TO50:NEXT:PRINTRE$"0"
  192. 2875 FORT=1TO50:NEXT:NEXT:GOSUB10000
  193. 2880 WN=33:PRINTWN$WN:FORA=1TO10:PRINTRE$"[214]0"
  194. 2881 FORT=1TO50:NEXT:PRINTRE$"0"
  195. 2885 FORT=1TO50:NEXT:NEXT:M0=M1:M1=50:GOSUB10000
  196. 2890 WN=65:PRINTWN$WN:FORA=1TO10:PRINTRE$"[214]0"
  197. 2891 FORT=1TO50:NEXT:PRINTRE$"0"
  198. 2895 FORT=1TO50:NEXT:NEXT:M0=M1:M1=60:GOSUB10000
  199. 2900 WN=129:PRINTWN$WN:PRINTRE$"0":GOSUB10000
  200. 2910 MS$="   NOISE[146]!":GOSUB63100:GOSUB63000
  201. 2920 PRINT"[147]OK..NOW LET'S HAVE THREE[146] VOICES":MS$="   THREE?":GOSUB63100
  202. 2930 GOSUB63000:PRINT"[147]               JESU JOY                 "
  203. 2940 PRINT"                WN=17":WN=17
  204. 2950 PRINT"              AT=0:DE=0":AT=0:DE=0
  205. 2960 PRINT"              SU=10:RE=9":SU=10:RE=9
  206. 2970 GOSUB63000
  207. 2980 MV=2:M0=1:M1=67:GOSUB10000
  208. 3000 XX=1
  209. 3010 PRINT"[147]NOW YOU[157][157][157][184][184][184][145] PICK THE PARAMETERS"
  210. 3020 PRINT"FOR THESE THREE[146] VOICES."
  211. 3030 PRINT"  ATTACK ";AT
  212. 3035 INPUT"  [145]";AT:AT=AT AND 15
  213. 3040 PRINT"  DECAY  ";DE
  214. 3045 INPUT"  [145]";DE:DE=DE AND 15
  215. 3050 PRINT"  SUSTAIN  ";SU
  216. 3055 INPUT"  [145]";SU:SU=SU AND 15
  217. 3060 PRINT"  RELEASE  ";RE
  218. 3065 INPUT"  [145]";RE:RE=RE AND 15
  219. 3070 PRINT"  WAVEFORM  ";WN
  220. 3075 INPUT"  [145]";WN:IFWN<>17ANDWN<>33ANDWN<>65ANDWN<>129THEN3075
  221. 3080 MV=2:M0=1:M1=31:GOSUB10000
  222. 3090 INPUT"AGAIN   Y[157][157][157]";A$:IFA$="Y"THENPRINT"":GOTO3030
  223. 3100 PRINT"[147]NOW, FOR THREE[146] VOICES!"
  224. 3110 PRINT"SID=54272"
  225. 3120 PRINT"POKE SID  ,LO FREQ NUMBER "
  226. 3140 PRINT"POKE SID+1,HI FREQ NUMBER "
  227. 3150 PRINT"POKE SID+2,LO PULSE WIDTH "
  228. 3160 PRINT"POKE SID+3,HI PULSE WIDTH "
  229. 3161 PRINT"POKE SID+4,WAVEFORM NUMBER"
  230. 3170 PRINT"POKE SID+5,16*AT+DE       "
  231. 3180 PRINT"POKE SID+6,16*SU+RE       "
  232. 3190 PRINT"POKE SID+24,VOL          "
  233. 3200 PRINT"ALL THIS FOR VOICE #1."
  234. 3210 PRINT"...AND,FOR VOICE #2[146]...":GOSUB63000:PRINT""
  235. 3220 Z$(0)="POKE SID+7,LO FREQ NUMBER  "
  236. 3240 Z$(1)="POKE SID+8,HI FREQ NUMBER  "
  237. 3250 Z$(2)="POKE SID+9,LO PULSE WIDTH  "
  238. 3260 Z$(3)="POKE SID+10,WAVEFORM NUMBER"
  239. 3265 Z$(4)="POKE SID+11,HI PULSE WIDTH "
  240. 3270 Z$(5)="POKE SID+12,16*AT+DE       "
  241. 3280 Z$(6)="POKE SID+13,16*SU+RE       "
  242. 3290 Z$(7)="POKE SID+24,VOL  _SAME!    "
  243. 3300 FORI=0TO7:L=LEN(Z$(I)):FORJ=1TOL:PRINT"";
  244. 3310 PRINTMID$(Z$(I),J,1);:FORT=1TO10:NEXT:NEXT:PRINT:NEXT
  245. 3320 FORI=1TO5:PRINTBL$:NEXT:MS$="& VOICE3?":GOSUB63100:GOSUB63000:PRINT""
  246. 3330 Z$(0)="POKE SID+14,LO FREQ NUMBER "
  247. 3340 Z$(1)="POKE SID+15,HI FREQ NUMBER "
  248. 3350 Z$(2)="POKE SID+16,LO PULSE WIDTH "
  249. 3360 Z$(3)="POKE SID+17,HI PULSE WIDTH "
  250. 3365 Z$(4)="POKE SID+18,WAVEFORM NUMBER"
  251. 3370 Z$(5)="POKE SID+19,16*AT+DE       "
  252. 3380 Z$(6)="POKE SID+20,16*SU+RE       "
  253. 3390 Z$(7)="POKE SID+24,VOL  _SAME!    "
  254. 3400 FORI=0TO7:L=LEN(Z$(I)):FORJ=1TOL
  255. 3410 PRINTMID$(Z$(I),J,1);:FORT=1TO10:NEXT:NEXT:PRINT:NEXT
  256. 3420 GOSUB63000
  257. 3430 PRINT"[147]JUST DO:"
  258. 3440 PRINT"SID=54272"
  259. 3445 PRINT"FOR VC=0 TO 2"
  260. 3450 PRINT"POKE SID+7*VC  ,LO FREQ NUMBER "
  261. 3460 PRINT"POKE SID+7*VC+1,HI FREQ NUMBER "
  262. 3470 PRINT"POKE SID+7*VC+2,LO PULSE WIDTH "
  263. 3480 PRINT"POKE SID+7*VC+3,HI PULSE WIDTH "
  264. 3490 PRINT"POKE SID+7*VC+4,WAVEFORM NUMBER"
  265. 3500 PRINT"POKE SID+7*VC+5,16*AT+DE       "
  266. 3510 PRINT"POKE SID+7*VC+6,16*SU+RE       "
  267. 3515 PRINT"NEXT VC"
  268. 3520 PRINT"POKE SID+24,VOL          "
  269. 3530 GOSUB63000:PRINT"BUT DON'T START THE NOTE TOO EARLY!!!"
  270. 3540 A$="                               ":L=LEN(A$):PRINT"";
  271. 3550 FORI=1TOL:PRINTMID$(A$,I,1);:FORT=1TO100:NEXT:NEXT:PRINT
  272. 3560 A$="POKE SID+7*VC+4,WAVEFORM NUMBER":PRINT"";
  273. 3570 FORI=1TOL:PRINTMID$(A$,I,1);:FORT=1TO100:NEXT:NEXT:PRINT
  274. 3580 MS$="NOW START!":GOSUB63100:GOSUB63000:PRINT"[147]SETUP:"
  275. 3600 PRINT"SID=54272              [146]"
  276. 3610 PRINT"FOR VC=0 TO 2          [146]"
  277. 3620 PRINT"POKE SID+7*VC  ,0      [146]:LO FREQ=0"
  278. 3630 PRINT"POKE SID+7*VC+1,0      [146]:HI FREQ=0"
  279. 3640 PRINT"POKE SID+7*VC+2,160    [146]:HI PULSE"
  280. 3650 PRINT"POKE SID+7*VC+3,15     [146]:LO PULSE"
  281. 3660 PRINT"POKE SID+7*VC+4,0      [146]:TURN OFF!"
  282. 3670 PRINT"POKE SID+7*VC+5,16*0+0 [146]:AT=0:DE=0"
  283. 3680 PRINT"POKE SID+7*VC+6,16*10+9[146]:SU=10:RE=9"
  284. 3690 PRINT"NEXT VC                [146]"
  285. 3695 PRINT"POKE SID+24,15:WN=65   [146]:PULSE"
  286. 3700 PRINT"PLAY:"
  287. 3710 PRINT"READ FL,FH,DU         [146]:FREQ & DURATION"
  288. 3720 PRINT"POKE SID+7*VC,FL      [146]:POKE LO FREQ"
  289. 3730 PRINT"POKE SID+7*VC+1,FH    [146]:POKE HI FREQ"
  290. 3740 PRINT"POKE SID+7*VC+4,WN    [146]:GATE IT"
  291. 3750 PRINT"FOR T=1 TO DU:NEXT    [146]:DURATION"
  292. 3760 PRINT"VC=VC+1:IFVC=2THENVC=0[146]:NEXT VOICE!"
  293. 3770 PRINT"POKE SID+7*VC+1,WN-1  [146]:STOP IT!"
  294. 3780 PRINT"REPEAT ABOVE.."
  295. 4000 M0=1:M1=103:PU=2000:WN=65:AT=5:DE=2:SU=10:RE=3
  296. 4010 MV=2:XX=2:GOSUB10000
  297. 9999 GOSUB63000:PRINT"[147]":MS$="AU REVOIR!":GOSUB63100:PRINT"":END
  298. 10000 IFPU=0THENPU=4000
  299. 10001 S=54272:FORVV=0TO2:POKES+5+7*VV,16*AT+DE:POKES+6+7*VV,16*SU+RE
  300. 10002 POKES+2+7*VV,PUAND255:POKES+3+7*VV,PU/256:POKES+7*VV,0:POKES+1+7*VV,0
  301. 10003 NEXT:POKES+24,15:QQ=2^(1/12)
  302. 10004 IFXX=2THEN10010
  303. 10005 PRINT""BL$:PRINTBL$:PRINT"[145][145]"
  304. 10006 IFWN=17THENPRINT"  "TR$TR$TR$TR$
  305. 10007 IFWN=33THENPRINT"  "SA$SA$SA$SA$
  306. 10008 IFWN=65THENPRINT"  "PU$PU$PU$PU$
  307. 10009 IFWN=129THENPRINT"  "NO$
  308. 10010 FORI=M0TOM1:FR=2000*(QQ^N(I))
  309. 10020 HI=INT(FR/256):LO=FR-256*HI:POKES+7*VC,LO:POKES+1+7*VC,HI:POKES+4+7*VC,WN
  310. 10030 FORJ=1TO50*P(I):NEXT:VC=VC+1:IFVC>MVTHENVC=0
  311. 10035 POKES+4+7*VC,WN-1
  312. 10040 NEXT:FORVV=0TO2:POKES+4+7*VV,0:NEXT:FORT=1TO500:NEXT:IFXX=0THENGOSUB63000
  313. 10050 RETURN
  314. 50000 REM JESU JOY
  315. 50001 RESTORE
  316. 50002 READ M
  317. 50003 DIM N(M),P(M)
  318. 50005 FORI=1TOM
  319. 50006 READN(I),P(I):NEXT:RETURN
  320. 50009 DATA 103
  321. 50010 DATA12,2,8,2,10,2,12,2,15,2,13,2,13,2,17,2,15,2,15,2
  322. 50011 DATA20,2,19,2,20,2,15,2,12,2,8,2,10,2,12,2,13,2,15,2
  323. 50012 DATA17,2,15,2,13,2,12,2,10,2,12,2,8,2,7,2,8,2,10,2
  324. 50013 DATA3,2,7,2,10,2,13,2,12,2,10,2,12,2,8,2,10,2,12,2
  325. 50014 DATA15,2,13,2,13,2,17,2,15,2,15,2,20,2,19,2,20,2,15,2
  326. 50015 DATA12,2,8,2,10,2,12,2,5,2,15,2,13,2,12,2,10,2,8,2
  327. 50016 DATA3,2,8,2,7,2,8,2,12,2,15,2,20,2,15,2,12,2,8,2
  328. 50017 DATA12,2,15,2,18,2,15,2,12,2,8,2,12,2,15,2,17,2,13,2
  329. 50018 DATA10,2,7,2,10,2,13,2,15,2,12,2,8,2,5,2,8,2,12,2
  330. 50019 DATA13,2,10,2,7,2,3,2,7,2,10,2,13,2,12,2,10,2,8,2
  331. 50020 DATA12,2,15,2,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  332. 60000 REM INITIALIZE
  333. 60001 BT$="":FORI=1TO24:BT$=BT$+"":NEXT
  334. 60002 PT$="[176][192][192][192][192][192][192][192][192][192][192][174][157][157][157][157][157][157][157][157][157][157][157][157][221][221][157][157][157][157][157][157][157][157][157][157][157][157][173][178][192][192][192][192][192][192][192][192][178][189]"
  335. 60003 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][206][163][163][163][163][163][163][163][163][163][163][163][163][205][157][157][157][157][157][157][157][157][157][157][157][157][157][157][165]============[167]"
  336. 60004 PT$=PT$+"[157][157][157][157][157][157][157][157][157][157][157][157][157][157][208][207][163][163][163][163][163][163][163][163][163][163][208][207][145][145][145][145][157][157][157][157][157][157][157][157][157][157][157][157]"
  337. 60005 PT$=BT$+"[145][145][145][145][145][145]"+PT$+"[144]"
  338. 60007 BL$="                                       "
  339. 60008 WD=40:CRT=1024
  340. 60009 POKE53281,1:POKE53280,15:PRINT"[144]"
  341. 60010 V=53248:FORI=0TO16:POKEV+I,0:NEXT
  342. 60011 POKEV+23,0:POKEV+29,0:FORI=0TO7:POKEV+39+I,0:NEXT
  343. 60012 N$(1)="[176][192][178][192][178][192][178][192][174]"
  344. 60013 N$(2)="[221] [221] [221] [221] [221]"
  345. 60014 N$(3)="[173][192][177][192][177][192][177][192][189]"
  346. 60015 NN$(1)="[176][192][178][192][178][192][178][192][178][192][178][192][178][192][178][192][174]"
  347. 60016 NN$(2)="[221] [221] [221] [221] [221] [221] [221] [221] [221]"
  348. 60017 NN$(3)="[173][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][189]"
  349. 60020 R$="[176][178][178][178][178][178][178][178][174][157][157][157][157][157][157][157][157][157][173][177][177][177][177][177][177][177][189][145]"
  350. 60030 L$="- - - - - - - - -"
  351. 60040 PS$=""
  352. 60050 DN$=""
  353. 60060 BMM$="":MCM$="":SMB$=""
  354. 60070 CMB$=SMB$+"":CL$="                                        "
  355. 60080 DN$=DN$+CL$+DN$
  356. 60090 SC$=SMB$+""
  357. 60100 CH$=SC$+""
  358. 60110 DD$="":DD$=DD$+CL$+DD$
  359. 60120 TR$="[206][145][206][205][205]"
  360. 60130 SA$="[206][145][206][165][157][204]"
  361. 60140 PU$="[165][145][157][207][208][157][167][164][164][164][164][157]":NN=9
  362. 60200 GOSUB62005:GOSUB63500:RETURN
  363. 62000 :
  364. 62005 U$="[180][145][157]":D$="[180][157]":T$="[207][180][157]":B$="[204][180][145][157]"
  365. 62010 A$(0)="[175]"
  366. 62011 A$(1)=T$+B$:U=1:D=2:FORJ=2TO10
  367. 62012 A$="":FORI=1TOU:A$=A$+U$:NEXT:A$=A$+T$:FORI=1TOD:A$=A$+D$:NEXT
  368. 62013 A$=A$+B$:FORI=1TOU:A$=A$+U$:NEXT:A$(J)=A$:U=U+1:D=2*U:NEXT
  369. 62015 FORJ=1TO5:D$(J)=A$(10-J):NEXT
  370. 62016 SS$=D$(5)
  371. 62017 FORI=1TO5:R$(I)=A$(5-I):NEXT
  372. 62020 RETURN
  373. 63000 PRINT"HIT RETURN[146] TO CONTINUE";
  374. 63001 GETA$:IFA$<>""THEN63001
  375. 63002 GETA$:IFA$=""THEN63002
  376. 63003 RETURN
  377. 63004 RETURN
  378. 63100 FORT=1TO5:PRINTPT$MS$;
  379. 63101 PRINTPT$"          ";
  380. 63102 PRINTPT$MS$;:NEXT
  381. 63103 PRINT"[144]":RETURN
  382. 63200 PRINT"":FORI=0TO10:FORJ=1TOLEN(A$(I))
  383. 63205 PRINTMID$(A$(I),J,1);:NEXT:NEXT
  384. 63210 FORI=0TO5:FORJ=1TOLEN(D$(I))
  385. 63215 PRINTMID$(D$(I),J,1);:NEXT:NEXT
  386. 63220 FORI=0TO3:FORJ=1TOLEN(SS$)
  387. 63225 PRINTMID$(SS$,J,1);:NEXT:NEXT
  388. 63230 RETURN
  389. 63300 PRINT""
  390. 63305 FORI=0TO10:FORJ=1TOLEN(SS$)
  391. 63310 PRINTMID$(SS$,J,1);:NEXT:NEXT
  392. 63320 FORI=0TO4:FORJ=1TOLEN(R$(I))
  393. 63330 PRINTMID$(R$(I),J,1);:NEXT:NEXT
  394. 63340 FORI=1TO3:PRINTA$(0);:NEXT:RETURN
  395. 63400 PRINT"":FORI=3TO10:PRINTA$(I);:NEXT
  396. 63410 FORI=1TO5:PRINTD$(I);:NEXT
  397. 63420 FORI=0TO2:PRINTSS$;:NEXT
  398. 63430 FORI=1TO4:PRINTR$(I);:NEXT
  399. 63450 PRINT"-----A[146]TTACK------D[146]ECAY--S[146]USTAIN--R[146]ELEASE":RETURN
  400. 63500 U$="[221][145][157]":D$="[221][157]"
  401. 63510 A$="":FORI=1TONN:K=1+4*RND(1):FORJ=1TOK:A$=A$+U$:NEXT:A$=A$+"[176][174][157]"
  402. 63520 FORJ=1TOK:A$=A$+D$:NEXT:A$=A$+"[145][173]":NEXT:NO$=A$:RETURN
  403. 63600 PRINT"[147]SID=54272":SID=54272
  404. 63605 IFXX=0THEN GOSUB63000
  405. 63610 PRINT"HI=INT("FQ"/256)":HI=INT(FQ/256)
  406. 63615 IFXX=0THENGOSUB63000
  407. 63620 PRINT"LO="FQ"-256*HI":LO=FQ-256*HI
  408. 63625 IFXX=0THENGOSUB63000
  409. 63630 PRINT"POKE SID  ,LO":POKESID,LO
  410. 63635 IFXX=0THENGOSUB63000
  411. 63640 PRINT"POKE SID+1,HI":POKESID+1,HI
  412. 63645 IFXX=0THENGOSUB63000
  413. 63646 IFPU=0THEN63680
  414. 63650 PRINT"PULSE="PU
  415. 63655 IFXX=0THENGOSUB63000
  416. 63660 PRINT"POKE SID+2,PULSE AND 255":POKESID+22,PUAND255
  417. 63665 IFXX=0THENGOSUB63000
  418. 63670 PRINT"POKE SID+3,PULSE/256":POKESID+3,PU/256
  419. 63675 IFXX=0THENGOSUB63000
  420. 63680 PRINT"AT="AT":DE="DE":SU="SU":RE="RE
  421. 63681 IFXX=0THENGOSUB63000
  422. 63685 PRINT"POKE SID+5,16*AT+DE":POKESID+5,16*AT+DE
  423. 63686 IFXX=0THENGOSUB63000
  424. 63690 PRINT"POKE SID+6,16*SU+RE":POKESID+6,16*SU+RE
  425. 63695 IFXX=0THENGOSUB63000
  426. 63700 PRINT"VOLUME="VOL
  427. 63705 IFXX=0THENGOSUB63000
  428. 63710 PRINT"POKE SID+24,VOLUME":POKESID+24,VOL
  429. 63715 IFXX=0THENGOSUB63000
  430. 63720 PRINT"WN="WN
  431. 63725 IFXX=0THENGOSUB63000
  432. 63726 FORXX=1TO3
  433. 63727 PRINT"                                "
  434. 63730 PRINT"POKE SID+4,WN  :REM GATE IT!":POKESID+4,WN
  435. 63735 FORT=1TO1000:NEXT
  436. 63736 PRINT"                            "
  437. 63740 PRINT"POKE SID+4,WN-1:REM RELEASE IT!!":POKESID+4,WN-1
  438. 63741 FORT=1TO1000:NEXT:NEXT
  439. 63745 GOSUB63000:POKESID+24,0:PU=0:RETURN
  440. 63800 PRINT"[147]FREQ (HERTZ)= "FR:INPUT"[145]";FR:IFFR>3900THEN63800
  441. 63801 FQ=INT(FR/.059604645+.5):PRINT"FQ="FQ
  442. 63805 PRINT"WAVEFORM (T[146]RIANGLE,S[146]AWTOOTH,P[146]ULSE"
  443. 63806 GETWN$:IFWN$=""THEN63806
  444. 63810 IFWN$="T"THENWN=17:GOTO63825
  445. 63815 IFWN$="S"THENWN=33:GOTO63825
  446. 63820 IFWN$="P"THENWN=65:GOTO63825
  447. 63821 GOTO63806
  448. 63825 PRINT"WN="WN:IFWN<>65THEN63835
  449. 63830 PRINT"PULSE WIDTH= ";PU
  450. 63831 INPUT"[145]";PU
  451. 63835 PRINT"ATTACK= ";AT
  452. 63836 INPUT"[145]";AT
  453. 63837 PRINT"DECAY = ";DE
  454. 63838 INPUT"[145]";DE
  455. 63840 PRINT"SUSTAIN = ";SU
  456. 63841 INPUT"[145]";SU
  457. 63842 PRINT"RELEASE = ";RE
  458. 63843 INPUT"[145]";RE
  459. 63845 INPUT"VOLUME   15[157][157][157][157]";VOL
  460. 63850 RETURN
  461.